package qj.app.console;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import qj.app.console.Config.Console;
import qj.app.console.invoker.GaeInvoker;
import qj.app.console.invoker.Invoker;
import qj.app.console.invoker.JBossInvoker;
import qj.util.ReflectUtil;

public class Registry {
	public static Map<String,Class<? extends Invoker>> register = new HashMap<String, Class<? extends Invoker>>();
	public static Map<String,Configurator> configurators = new HashMap<String, Configurator>();
	
	static  {
		register.put("gae", GaeInvoker.class);
		register.put("jboss", JBossInvoker.class);

		configurators.put("gae", Configurator.defau(
				Arrays.asList("war.home","port"),
				Arrays.asList("gae.home")
				));
		configurators.put("jboss", Configurator.defau(Arrays.asList("jboss.home")));
	}
	
	public static Invoker getInvoker(Console console, Config config) {
		
		Class<? extends Invoker> clazz = register.get(console.type);
		if (clazz != null) {
			Invoker invoker = ReflectUtil.newInstance(clazz);
			invoker.init(config.invokerConfigs.get(console.type),console.properties);
			return invoker;
		}
		
		return null;
	}

	public static Configurator getConfigurator(Console console, Config config) {

		Configurator configurator = configurators.get(console.type);
		if (configurator != null) {
			return configurator;
		}
		
		return null;
	}
}
